package com.swotplus.system.sys.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.swotplus.common.utils.StringUtils;
import com.swotplus.system.sys.entity.SysUser;
import com.swotplus.system.sys.entity.SysUserPost;
import com.swotplus.system.sys.entity.SysUserRole;
import com.swotplus.system.sys.mapper.SysUserMapper;
import com.swotplus.system.sys.mapper.SysUserPostMapper;
import com.swotplus.system.sys.mapper.SysUserRoleMapper;
import com.swotplus.system.sys.service.SysUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.swotplus.system.sys.vo.SysUserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 用户信息表 服务实现类
 * </p>
 *
 * @author hugang
 * @since 2020-04-12
 */
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
        @Autowired
        private SysUserMapper  sysUserMapper;
        @Autowired
        private SysUserRoleMapper sysUserRoleMapper;
        @Autowired
        private SysUserPostMapper sysUserPostMapper;

        @Override
        public IPage<SysUser> selectUserList(Page page ,SysUserVo sysUser) {
                return sysUserMapper.selectUserList(page,sysUser);
        }

        /**
         * 新增保存用户信息
         *
         * @param user 用户信息
         * @return 结果
         */
        @Override
        public int insertUser(SysUser user) {
                // 新增用户信息
                int rows =  sysUserMapper.insert(user);
                // 新增用户岗位关联
                insertUserRole( user);
                // 新增用户与角色管理
                insertUserPost(user);
                return rows;
        }
        /**
         * 修改保存用户信息
         *
         * @param user 用户信息
         * @return 结果
         */
        @Override
        public int updateUser(SysUser user) {
                String userId = user.getId();
                // 删除用户与角色关联
                QueryWrapper<SysUserRole> sysUserRoleQueryWrapper=new QueryWrapper<>();
                sysUserRoleQueryWrapper.eq("user_id",userId);
                sysUserRoleMapper.delete(sysUserRoleQueryWrapper);
                // 新增用户与角色管理
                insertUserRole(user);
                // 删除用户与岗位关联
                QueryWrapper<SysUserPost> sysUserPostQueryWrapper=new QueryWrapper<>();
                sysUserPostQueryWrapper.eq("user_id",userId);
                sysUserPostMapper.delete(sysUserPostQueryWrapper);
                // 新增用户与岗位管理
                insertUserPost(user);
                return sysUserMapper.updateById(user);
        }


        /**
         * 新增用户角色信息
         *
         * @param user 用户对象
         */
        public void insertUserRole(SysUser user)
        {
                String[] roles = user.getRoleIds();
                if (StringUtils.isNotNull(roles))
                {
                        // 新增用户与角色管理
                        for (String roleId : roles)
                        {
                                SysUserRole ur = new SysUserRole();
                                ur.setUserId(user.getId());
                                ur.setRoleId(roleId);
                                sysUserRoleMapper.insert(ur);
                        }
                }
        }

        /**
         * 新增用户岗位信息
         *
         * @param user 用户对象
         */
        public void insertUserPost(SysUser user)
        {
                String[] posts = user.getPostIds();
                if (StringUtils.isNotNull(posts))
                {
                        // 新增用户与岗位管理
                        for (String postId : posts)
                        {
                                SysUserPost up = new SysUserPost();
                                up.setUserId(user.getId());
                                up.setPostId(postId);
                                sysUserPostMapper.insert(up);
                        }
                }
        }
}
